Client applications that access a remote backend service are typically tightly coupled to that service. Each version of the service may require an update to the client application. For example, depending upon the version of the service that a user accesses, the client application architecture may need to change to reflect different capabilities in different versions. This may also result in different user interfaces being presented to the user depending upon which service is being accessed.
Existing attempts to address this issue require different versions of the client application that are each tied to specific versions of the service. However, this requires more maintenance because different versions of the product must be maintained.
The client application typically requires data from a server during runtime. Calls to a remote server can add a delay to the application due to the time required to obtain the requested information. Additionally, calls to the server unnecessarily add to network traffic each time the same information is requested. Many client applications will cache certain data that is used often or that was recently requested. By accessing a local cache for this data, the client application can reduce the number of calls to the server. However, a problem arises if the data has been in the cache for too long and has become “stale.”
Known solutions to this problem, such as always going to the server for data or storing data locally, have disadvantages. If data is always retrieved from the server, the application will increase network traffic and will suffer a performance reduction due to network delays. If a local storage is used for the server data, then the client application would be tied to one platform. The application would need to be rewritten if it was to run on another platform.
The client application could query the server to check if the cache data was stale, but such a system would also increase network traffic. One call would be made for every data read to verify currency of the data, and often a second call would have to be made to retrieve new data. Such increased network traffic would reduce the performance of the application.